/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: a1227
 * Date: 2022-07-12
 * Time: 12:49
 */
public class Practice {
    /**
     * 求独身数、水仙花数、四叶玫瑰数、五角星数、六合数
     * @param args
     */
    public static void findNum(int n){
        for (int i = 1; i <= n; i++) {
            int count = 0;//计算一个数有几位
            int tmp = i;//存储i
            while(tmp != 0){
                count++;
                tmp /= 10;
            }
            int sum = 0;
            tmp = i;
            while(tmp != 0){
                sum += Math.pow((tmp % 10),count);
                tmp /= 10;
            }
            if(i == sum){
                System.out.println(sum);
            }
        }
    }

    /**
     * 写一个函数返回参数二进制中 1 的个数 比如： 15 0000 1111 4 个 1
     * @param args
     */
    public static int numOfOne(int n){
        int count = 0;
        while(n != 0){
            if((n & 1) == 1){
                count++;
            }
            n >>>= 1;
        }
        return count;
    }

    /**
     * 获取一个数二进制序列中所有的偶数位和奇数位， 分别输出二进制序列
     * @param args
     */
    public static void Print(int n){
        //奇数
        for (int i = 30; i >= 0; i -= 2) {
            int tmp = n >>> i;
            tmp = tmp & 1;
            System.out.print(tmp+" ");
        }
        System.out.println();
        //偶数
        for (int i = 31; i >= 0 ; i -= 2) {
            int tmp = n >>> i;
            tmp = tmp & 1;
            System.out.print(tmp+" ");
        }
    }

    /**
     * 输出一个整数的每一位
     * @param args
     */
    public static void printfEveryOne(int n){
        if(n<10) {
            System.out.print(n+" ");
        }else{
            printfEveryOne(n / 10);
            System.out.print((n%10)+" ");
        }

    }

    /**
     * 汉诺塔
     * @param n     //盘子的个数
     * @param pos1  //盘子的起始位置
     * @param pos2  //盘子的中转位置
     * @param pos3  //盘子的结束位置
     */
    public static void move(char pos1,char pos3){
        System.out.print(pos1+"->"+pos3+" ");
    }

    public static void hanoi(int n,char pos1,char pos2,char pos3){
        if(n==1){
            move(pos1,pos3);
        }else{
            hanoi(n-1,pos1,pos3,pos2);
            move(pos1,pos3);
            hanoi(n-1,pos2,pos1,pos3);
        }
    }

    public static void main(String[] args) {
        //findNum(999999);
        //System.out.println(numOfOne(-1));
        //Print(11);
        //printfEveryOne(123456789);
        hanoi(1,'A','B','C');
        System.out.println();
        hanoi(2,'A','B','C');
        System.out.println();
        hanoi(3,'A','B','C');
        System.out.println();
    }
}
